<?php
class RecursoDAO extends GenericDAO  {
	
	function __construct() {
		$this->tabela["alteracao"] = array(	"id" 	=> 32, 
											"nome" 	=> strtolower(substr(get_class(), 0, -3)));
		
		$this->tabela["consulta"]  = array(	"id" 	=> 38,
											"nome" 	=> "vw_" . strtolower(substr(get_class(), 0, -3)));
	}
	
	public function consultarPK($valor) {
	    $sql = "where id = :id";
	    $params['id'] = $valor;
	    return $this->consultar($sql, $params);
	}
	
	public function consultarNome($nome) {
		$sql = "where nome = :nome";
		$params['nome'] = $nome;
	    return $this->consultar($sql, $params);
	}

	public function consultarFilhos($recurso) {
		if (is_null($recurso)) {
			$sql = "where recurso is null";
			$params = null;
		} else if (is_numeric($recurso)) {
			$sql = "where recurso = :recurso";
			$params['recurso'] = $recurso;
		} else {
			$sql = "where de_nome = :recurso";
			$params['recurso'] = $recurso;
		}
	    return $this->consultar($sql, $params);
	}
		
	public function contarFilhos($recurso) {
		if (is_null($recurso)) {
			$sql = "where recurso is null";
			$params = null;
		} else {
			$sql = "where recurso = :recurso";
			$params['recurso'] = $recurso;
		}
		return $this->contarRegistros($sql, $params);
	}
	
	public function consultarArvore($recurso = null) {
		$filhos = $this->consultarFilhos($recurso);
		foreach ($filhos as $id => $filho) {
			if ($this->consultarPermissao($_SESSION['usuario']['id'], $filho['id'])) {
				$filho['subs'] = $this->consultarArvore($filho["id"]);
				$head[] = $filho; 
			}
		}
		return isset($head) ? $this->addRecursoSelfPerm($head) : array();
	}
	
	public function inserir($registro, $finalizarTransacao = true) {
		if ($this->inserirRegistro($registro, $finalizarTransacao)) {
			$registro['id'] = $this->ultimoId();
		}
		return $registro;
	}
	
	public function excluir($id, $finalizarTransacao = true) {
		$pk['id'] = $id;
		$dao = new AcessoDAO();
		$dao->excluirRecurso($id, false);
		$res = $this->excluirRegistro($pk, $finalizarTransacao);
		return $res;
	}
	
	public function alterar($registro, $finalizarTransacao = true) {
		$reg['nome'] 		= $registro['nome'];
		$reg['titulo'] 		= $registro['titulo'];
		$reg['descricao'] 	= $registro['descricao'];
		$pk['id'] 			= $registro['id'];
		return $this->alterarRegistro($reg, $pk, $finalizarTransacao);
	}
}
?>